/* Soubor je ulozen v kodovani UTF-8.
 * Kontrola kódování: Příliš žluťoučký kůň úpěl ďábelské ódy.
 */
package cz.pecinovsky.english.pojj.adv_framework.test_util.default_gui;

import java.awt.Font;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

import javax.swing.text.BadLocationException;
import javax.swing.text.Document;



/*******************************************************************************
 * Instance třídy {@code OknoŽurnálu} představují okna,
 * do nichž se na požádání vypisují zprávy žurnálu.
 *
 * @author    Rudolf PECINOVSKÝ
 * @version   0.00.000
 */
public class OknoŽurnálu
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== STATICKÝ INICIALIZAČNÍ BLOK - STATICKÝ KONSTRUKTOR ========================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================

    /** Okno, v němž se bude obsah žurnálu zobraovat. */
    private final JFrame okno = new JFrame("Žurnál");

    /** Textové pole, , v němž se bude obsah žurnálu zobraovat. */
    private final JTextArea textovéPole = new JTextArea(16, 64);

    /** Dokument s obsahem zobrazovaným v textovém poli. */
    private final Document dokument;



//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     *
     */
    public OknoŽurnálu()
    {
        dokument = textovéPole.getDocument();
        textovéPole.setFont(new Font("Consolas", Font.PLAIN, 12));

        JScrollPane posuvník = new JScrollPane(textovéPole);
        okno.add(posuvník);
        okno.pack();
    }



//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================

    /***************************************************************************
     * Vrátí informaci o viditelnosti okna.
     *
     * @return Je-li okno viditelné, vrátí {@code true},
     *         jinak vrátí {@code false}
     */
    public boolean isVisible()
    {
        return okno.isVisible();
    }


    /***************************************************************************
     * Nastaví viditelnost okna.
     *
     * @param visible Nastavovaná viditelnost
     */
    public void setVisible(boolean visible)
    {
        okno.setVisible(visible);
    }



//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Přidá zadaný text na další řádek za konec zobrazované textu
     * a přesune za něj kurzor, aby byl text viditelný.
     *
     * @param text Přidávaný text
     */
    public void připiš(String text)
    {
        int zaPoslední = dokument.getLength();
        try {
            dokument.insertString(zaPoslední, text, null);
        } catch (BadLocationException ex) {
            throw new RuntimeException(
                    "\nŠpatně spočtená délka žurnálu", ex);
        }
        textovéPole.setCaretPosition(dokument.getLength());
    }


    /***************************************************************************
     * Smaže obsah okna.
     *
     */
    public void smaž()
    {
        textovéPole.setText("");
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== INTERNÍ DATOVÉ TYPY =======================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        OknoŽurnálu inst = new OknoŽurnálu();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
